let p = new Promise((resolve, reject) => {
    //函数体
    //1, resolve reject 作用是？
    //2.promise 什么时候变成成功？
    setTimeout(() => {
        // console.log(123);
        // resolve();
        reject(123);
    }, 1000);
})

p.then(() => {
    console.log("成功");
}).catch((err) => {
    console.log("失败", err);
})
console.log("开始测试");

Promise.all([p1, p2, p3]).then()
Promise.resolve().then(() => {

})

async function fn() {

}
// 需求：三个异步 ajax A B C；
//A =》B=》C
//第一种方式：原生。回调地狱； 高级函数

function CreateAjax(url, callback) {
    let xhr = new XMLHttpRequest();
    xhr.open("get", url);
    xhr.send();
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                //正常的返回了数据
                if (callback) {
                    callback(xhr.responseText);
                }
            }
        }
    }
}

function fn1() {
    CreateAjax("urlA", (dataA) => {
        //其他的逻辑
        CreateAjax("urlB", (dataB) => {
            //其他的逻辑
            CreateAjax("urlC")
        })
    })
}

//第一种：promise；
function CreatePromise(url) {
    let p = new Promise((resolve, reject) => {
        let xhr = new XMLHttpRequest();
        xhr.open("get", url);
        xhr.send();
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    //正常的返回了数据
                    //让promise变成成功？
                    resolve(xhr.responseText);
                } else {
                    //ajax 返回；但是没拿到数据
                    reject(xhr.status);
                }
            } else {
                //状态的变化，ajax的过程；
            }
        }
    })
    return p;
}
//能执行；不过这个不是链式！！还是嵌套！
CreatePromise("urlA").then((data) => {
    CreatePromise("urlB").then(() => {
        CreatePromise("urlC")
    })
})

//链式
CreatePromise("urlA")
    .then((dataA) => {
        return CreatePromise("urlB")
    })
    .then((dataB) => {
        //promiseB的then
        return CreatePromise("urlC")
    })
    .then((dataC) => {
        //ormise C的then
    })

//第三种 ：asnyc await 结合这promise使用；
async function fn(){
   let dataA= await CreatePromise("urlA");
   //其他的业务逻辑
   let dataB=await CreatePromise("urlB");
   //其他的业务逻辑
   let dataC=await CreatePromise("urlC");
}

//


